package cn.tedu.file;
/**
 * @Author 金帮嘉诚  @Date 2021-06-17 周四 10:19
 */
/*本类用于练习字节输入流*/

import java.io.*;

/**
 * 知识点：
 * InputStream()
 * FileInputStream()
 * BufferedInputStream()
 */
public class TestIn {
    public static void main(String[] args) {
//        method();//字节流读取
        method2();//高效字节流的读取
    }

    private static void method2() {
        InputStream in =null;//变量为空
        try {
//            InputStream bf =
//                    new BufferedInputStream
//                            (new FileInputStream
//                                    (new File("D:\\ready\\1.txt")));

            in =//变量为对象
                    new BufferedInputStream
                            (new FileInputStream
                                    ("D:\\ready\\1.txt"));
            //
//            in.read();
            int b;
            while ((b=in.read())!=-1){
                System.out.println(b);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void method() {
//        InputStream in=new InputStream();abstract
        //
        InputStream in = null;
        try {
//            InputStream in=
//                    new FileInputStream(new File("D:\\ready\\1.txt"));//可以用，就是代码长一些
            in =
                    new FileInputStream("D:\\ready\\1.txt");

            /*read()每次调用都会读取一个字节，如果读到末尾，返回负一*/
//            System.out.println("in.read() = " + in.read());//1.txt文件中的内容是abc时，会输出a的ascii码97
//            System.out.println("in.read() = " + in.read());//98
//            System.out.println("in.read() = " + in.read());//99
//            System.out.println("in.read() = " + in.read());//-1
//            System.out.println("in.read() = " + in.read());//-1
//            System.out.println("in.read() = " + in.read());//-1
            //
            System.out.println("文件内容：");
            int b;
            while ((b = in.read()) != -1) {//没有b作中间变量，多次使用read()就会多次执行read()，会导致不能完整输出文件内容
                System.out.println(b);
            }


        } catch (Exception e) {
            e.printStackTrace();//打印错误信息
            /*try-catch结构中的第三个部分：finally
             * 这部分不论是否捕获到异常，是一定会被执行到的代码，常用关于流*/
        } finally {
            //绝对会执行到的代码，即使try中有代码报错
            //释放资源，流资源用完必须释放！！！
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
